# -*- coding: utf-8 -*-
"""
@Time    : 2024/6/21 12:37 
@Author  : ZhangShenao 
@File    : router.py 
@Desc    : 路由器
"""
from dataclasses import dataclass

from flask import Flask, Blueprint
from injector import inject

from internal.handler import AppHandler


@inject  # 自动依赖注入各种Handler
@dataclass  # 通过dataclass简化依赖注入
class Router:
    """
    路由器
    """

    app_handler: AppHandler  # 应用控制器

    def register_route(self, app: Flask):
        """
        注册路由
        :param app: Flask应用
        """

        # 创建一个蓝图Blueprint
        bp = Blueprint('llm-ops', __name__, url_prefix='/llm-ops')

        # 将url与对应的控制器函数绑定

        # 应用API
        bp.add_url_rule('/app/debug', methods=['POST'], view_func=self.app_handler.debug)  # AI应用聊天调试
        bp.add_url_rule('/app', methods=['POST'], view_func=self.app_handler.create)  # 创建AI应用
        bp.add_url_rule('/app/<uuid:app_id>', methods=['GET'], view_func=self.app_handler.get_by_id)  # 根据ID查询AI应用
        bp.add_url_rule('/app/all', methods=['GET'], view_func=self.app_handler.get_all)  # 查询所有AI应用
        bp.add_url_rule('/app/<uuid:app_id>', methods=['PUT'], view_func=self.app_handler.update)  # 修改AI应用
        bp.add_url_rule('/app/<uuid:app_id>', methods=['DELETE'], view_func=self.app_handler.delete)  # 删除AI应用

        # 在Flask App上注册蓝图
        app.register_blueprint(bp)
